/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GestionVacunasPresentacion.java
 *
 * Created on 07/10/2010, 19:46:08
 */

package presentacion.vacuna;

import hibernate.objeto.Vacuna;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import logica.CapaLogica;
import logica.VacunaLogica;
import presentacion.CapaPresentacion;
import presentacion.acceso.RestriccionAcceso;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.Paginador;
import presentacion.utilidad.PopUpMenu;
import presentacion.utilidad.tabla.MiModeloTabla;

/**
 *
 * @author Gonzalo
 */
public class GestionVacunaPresentacion extends javax.swing.JDialog {

    /** Creates new form GestionVacunasPresentacion */
    public GestionVacunaPresentacion(java.awt.Frame parent, boolean modal) {
        super(parent, modal);

        initComponents();
        personalizarGUI();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarGestionVacuna(this));
        this.setTitle("Gestión de las vacunas");
        
        iniciarPaginador();

        cargarTablaVacuna();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        botonVolver = new javax.swing.JButton();
        tablaVacunaScrollPane = new javax.swing.JScrollPane();
        tablaVacuna = new javax.swing.JTable(new MiModeloTabla());
        filtrar = new javax.swing.JTextField();
        textoFiltrar = new javax.swing.JLabel();
        botonAgregarVacuna = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        botonAnteriorPaginadorUno = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(1024, 720));
        setResizable(false);

        botonVolver.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonVolver.setForeground(Fuente.COLOR_NORMAL);
        botonVolver.setIcon(Icono.ICONO_16_CANCELAR);
        botonVolver.setText("Volver");
        botonVolver.setToolTipText("Cancela la operación");
        botonVolver.setPreferredSize(new java.awt.Dimension(110, 23));
        botonVolver.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVolverActionPerformed(evt);
            }
        });

        tablaVacunaScrollPane.setMinimumSize(new java.awt.Dimension(50, 50));
        tablaVacunaScrollPane.setPreferredSize(new java.awt.Dimension(582, 311));

        tablaVacuna.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaVacunaverCaracteristicasMouseClicked(evt);
            }
        });
        tablaVacunaScrollPane.setViewportView(tablaVacuna);
        MiModeloTabla.inicializarTabla(tablaVacuna);

        filtrar.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrar.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarKeyReleased(evt);
            }
        });

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrar.setText("Filtrar");

        botonAgregarVacuna.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarVacuna.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarVacuna.setIcon(Icono.ICONO_16_AGREGAR);
        botonAgregarVacuna.setText("Agregar nueva");
        botonAgregarVacuna.setToolTipText("Agrega una nueva vacuna");
        botonAgregarVacuna.setPreferredSize(new java.awt.Dimension(175, 23));
        botonAgregarVacuna.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarVacunaActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tablaVacunaScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 1004, Short.MAX_VALUE)
                    .addComponent(botonVolver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(botonAgregarVacuna, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 597, Short.MAX_VALUE)
                        .addComponent(textoFiltrar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAgregarVacuna, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaVacunaScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(botonVolver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void tablaVacunaverCaracteristicasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaVacunaverCaracteristicasMouseClicked
        if (evt.getClickCount() == 2
                && evt.getButton() == 1) {
            propiedadesVacuna();
        } else if (evt.getButton() == 3){
            PopUpMenu.createPopupMenuVacuna(tablaVacuna, this, null);
        }
}//GEN-LAST:event_tablaVacunaverCaracteristicasMouseClicked

    private void filtrarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaVacuna.getModel());

        tablaVacuna.setRowSorter(sorter);
        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarKeyReleased

    private void botonAgregarVacunaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarVacunaActionPerformed
        Paginador.paginarElemento[0] = false;
        agregarVacuna();
}//GEN-LAST:event_botonAgregarVacunaActionPerformed

    private void botonVolverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVolverActionPerformed
        this.dispose();
}//GEN-LAST:event_botonVolverActionPerformed

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaVacuna();
}//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaVacuna();
}//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    /**
     * Agrega una nueva vacuna.
     */
    public void agregarVacuna() {
        RestriccionAcceso.VacunaPresentacion(null, true, null);
        
        cargarTablaVacuna();

        if (VacunaPresentacion.getVacuna() != null) {
            while (!MiModeloTabla.seleccionarFilaDeTabla(
                    String.valueOf(VacunaPresentacion.getVacuna().
                    getIdVacuna()), tablaVacuna, tablaVacunaScrollPane)) {
                paginarAdelanteTablaVacuna();
            }
        }
    }

    /**
     * Visualiza las propiedades de la vacuna
     */
    public void propiedadesVacuna() {
        Vacuna vacunaRecuperada = (Vacuna) MiModeloTabla.recuperarObjetoDeTabla(
                Vacuna.class.getName(), tablaVacuna);
        if (vacunaRecuperada != null) {
            RestriccionAcceso.VacunaPresentacion(null, true, vacunaRecuperada);

            MiModeloTabla.cargarTablaVacuna(
                    VacunaLogica.getVectorVacunaEnBd(), tablaVacuna);
            MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                    vacunaRecuperada.getIdVacuna()), tablaVacuna,
                    tablaVacunaScrollPane);
        }
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    propiedadesVacuna();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventos
        tablaVacuna.addKeyListener(keyListenerEnter);
        tablaVacuna.addKeyListener(keyListenerEscape);

        botonAnteriorPaginadorUno.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorUno.addKeyListener(keyListenerEscape);

        filtrar.addKeyListener(keyListenerEscape);

        botonAgregarVacuna.addKeyListener(keyListenerEscape);
        botonVolver.addKeyListener(keyListenerEscape);
    }

    private void cargarTablaVacuna() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);
        MiModeloTabla.cargarTablaVacuna(VacunaLogica.getVectorVacunaEnBd(),
                tablaVacuna);
    }

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 50;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;

        Paginador.inicializarPaginador(rangoFilas);
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaVacuna() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaVacuna.getModel().getColumnCount() > 0) {
               cargarTablaVacuna();
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaVacuna() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaVacuna.getModel().getColumnCount() > 0) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (VacunaLogica.getVectorVacunaEnBd() == null) {
                    Paginador.atrasPaginador(0);
                }
                cargarTablaVacuna();
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregarVacuna;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private javax.swing.JButton botonVolver;
    private javax.swing.JTextField filtrar;
    private javax.swing.JTable tablaVacuna;
    private javax.swing.JScrollPane tablaVacunaScrollPane;
    private javax.swing.JLabel textoFiltrar;
    // End of variables declaration//GEN-END:variables
}
